package cn.qdhlm.collectservice.core.component.command;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;

/**
 * @Name: CmdCom
 * @Description: CmdCom
 * @Author: jiangcs
 */
public class CmdCom {
    /**
     * 组包
     *
     * @param byteBufData
     * @return
     */
    public static ByteBuf pack(ByteBuf byteBufData) {
        ByteBuf byteBufHead = packHead(byteBufData);
        ByteBuf byteBufTail = packTail(byteBufData);
        return Unpooled.wrappedBuffer(byteBufHead, byteBufData, byteBufTail);
    }

    /**
     * 组包：头部
     *
     * @param byteBufData
     * @return
     */
    private static ByteBuf packHead(ByteBuf byteBufData) {
        ByteBuf byteBuf = Unpooled.buffer(6);
        byteBuf.writeByte(0x68);
        int dataLength = byteBufData.readableBytes();
        byteBuf.writeShortLE(dataLength);
        byteBuf.writeShortLE(dataLength);
        byteBuf.writeByte(0x68);
        return byteBuf;
    }

    /**
     * 组包：尾部
     *
     * @param byteBufData
     * @return
     */
    private static ByteBuf packTail(ByteBuf byteBufData) {
        ByteBuf byteBuf = Unpooled.buffer(2);
        int sum = 0;
        for (int i = 0, len = byteBufData.readableBytes(); i < len; i++) {
            sum += byteBufData.getByte(i);
        }
        byteBuf.writeByte(sum % 256);
        byteBuf.writeByte(0x16);
        return byteBuf;
    }
}
